整个工程的反思和收获
1. 做的好的
- 首先还是比较幸运能够全程参与到整个开发过程中,几乎算是让我一个人从 0 开始,技术选型、poc、搭建、推进整个过程了,对于一个非常成熟的产品来说,下定决心从新开始升级是比较需要胆量和决心的。IDE 作为前端深水区,这个方向的选择上以及坚持,无论是对我个人还是对前端团队来说,机会都是很大的。
- 在大家可能都不了解一项技术或者框架的前提之下(或者了解不深), 最需要做的是,进行技术调研,快速出 demo 并做完善的技术评审。 如果没有结论或者有同学有异议,技术评审还需要一直做,直到大家都没有疑问了之后,在开始快跑。作为一个级别不高的技术同学来说,最后的技术选型敲定,可能不是我来做。但是我前期能够做大量的调研(团队在 IDE 领域前些年可能有所积累,但是几乎没有文档落地),梳理模块文档,一方面是为了让自己更加熟悉,另一方面也是为了让团队的同学更加熟悉,让大家都能够有一个比较好的理解,这样后续的所有意见都有依据。
- 对开源社区的参与来说,有来有回,也有积极活跃在 github 上,有一个很好的开源社区形象,这对于一个团队来说,也是很重要的。
- 经过进 2 年时间在 IDE 领域的深耕,我们现在比较有信心,能够在 VS Code 之上几乎能完全实现所有功能(哪怕是支持 React),但是我们还是是比较懂得克制,对于这个新产品来说,不是用新技术实现一遍,而是趁此机会,对于老产品做一次变革,在需要动底座源码的之前,无论如何都会经过多次技术评审,问问自己做这些模块是否是符合 VS Code 设计的,我们做的这些扩展有没有可能贡献到 VS Code 源码中。
2. 做的可能还不够好的
1. 技术选型上
Fork VS Code 来搞,直接站在巨人的肩膀上来搞,固然没错,但是跟着社区玩其实是一件蛮难的事。重新让我选择一遍,其实我也并不一定会直接选择 VS Code 了。问题主要体现在:
- 周期性更新 VS Code 的代码:
- 首先是更新代码意味着合并大量的外部提交的代码,合并本身就是一个大工程,还需要通过单元测试、集成测试等各种手段来保证合入的代码并不会影响原有的功能迭代。
- 合并代码是为了解决旧版本的一些问题,但同样也带进来很多新功能,对 VS Code 来说是好事,但是对于一款商业化的产品来说,有很大的解释成本。
- 官方对 VS Code Web 的支持度:并不能说特别高,对浏览器的版本要求也挺高的。例如现在最新的 chrome 是 119,但是 CI 测试只跑 109? 还是多少,官方文档在宏没有说明对浏览器版本的支持情况(还是我提交了一个 issue 建议之后最近才加上的),说法是默认之支持最新的。 当然这也属于无奈之举,必须要在客户和自身的产品迭代之前选择一个权衡。
- 贡献核心代码是比较难的。 无论是 bug 还是 feature, 核心一点的 PR 基本上比较难同意合并。
- 整体节奏是有微软把控的,而不是业务自己。如果 VS Code 本身有一定的 bug,我们或许可以自行先解决,但是 VS Code 并不一定会这样处理。
- 无论我们对 VS Code 的使用有多熟悉,还是有很多占比的功能,是平时很少会接触、打开的。对于 VS Code 功能不符合我们要求的、或者我们还没有回归完整的功能,我们一般情况下是会进行注释,对于产品体验上是会有一定的影响。
- 周期性更新 VS Code 的代码:
2. 基建上
- 强有力的基建还是很重要的。云构建、CI 大多数都是出于能用(但不好用)的状态,在一款新产品的研发、构建、发布整个生命周期过程中稳健、好用的还是很关键的。
3. 其他
- 发现自己比较喜欢,通过 issue 或者 CR 的时候的异步沟通方式。